package com.linwen.excise.od.C;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @ClassName _C卷_会议室占用时间段
 * @Description TODO
 * @Author zero
 * @DATE 2024/4/4 11:12 AM
 * @Version 1.0
 */
public class _会议室占用时间段 {

    /**
     现有若干个会议，所有会议共享一个会议室，用数组表示各个会议的开始时间和结束时间，格式为:

     [[会议1开始时间，会议1结束时间]，[会议2开始时间，会议2结束时间]]

     请计算会议室占用时间段。


     输入描述
     [[会议1开始时间，会议1结束时间]，[会议2开始时间，会议2结束时间]]

     备注:
     会议室个数范围: [1,100]
     会议室时间段: [1,24]
     输出描述
     输出格式预输入一致,具体请看用例
     [[会议开始时间，会议结束时间]，[会议开始时间，会议结束时间]]

     示例1
     输入:
     [[1,4], [2,5],[7,9], [14,18]]
     输出
     [[1,5], [7,9],[14,18]]
     说明:
     时间段[1,4]和[2,5]重叠，合并为[1,5]

     **/

    public static void main(String[] args) {
        int[][] meetings = {{3,4}, {2,5},{7,14}, {13,18}};
        merge(meetings);
    }

    private static int[][] merge(int[][] meetings) {
        if(meetings==null||meetings.length==0){
            return new int[0][0];
        }
        Arrays.sort(meetings,(a,b)->a[0]-b[0]);
        List<int[]> res = new ArrayList<>();
        for (int i = 0; i < meetings.length; i++) {
            System.out.println(meetings[i][0]+" "+meetings[i][1]);
            if(res.isEmpty()) {
                res.add(meetings[i]);
            }else{
                int[] temp = new int[]{res.get(res.size() - 1)[0],res.get(res.size() - 1)[1]};
                if (isCover(temp, meetings[i])) {
                    res.remove(res.size() - 1);
                    res.add(new int[]{temp[0],Math.max(temp[1],meetings[i][1])});
                }else {
                    res.add(meetings[i]);
                }
            }
        }
        System.out.println("--------");
        int[][] result = new int[res.size()][2];
        for (int i = 0; i < res.size(); i++) {
            result[i] = res.get(i);
            System.out.println(res.get(i)[0]+" "+res.get(i)[1]);
        }
        return result;
    }

    private static boolean isCover(int[] ints, int[] meeting) {
        if(ints[1]<meeting[0]){
            return false;
        }
        return true;
    }
}
